package bite;

/**
 * Creared with IntelliJ IDEA.
 * Description:【手套】
 * 在地下室里放着n种颜色的手套，手套分左右手，但是每种颜色的左右手手套个数不一定相同。A先生现在要出门，所以他要去地下室选手套。但是昏暗的灯光让他
 * 无法分辨手套的颜色，只能分辨出左右手。所以他会多拿一些手套，然后选出一双颜色相同的左右手手套。现在的问题是，他至少要拿多少只手套(左手加右手)，才
 * 能保证一定能选出一双颜色相同的手套。
 * 给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26，且一定存在至少一种
 * 合法方案。
 * User:yxd
 * Date:2022-04-29
 * Time:20:23
 */
public class Day15_2 {
    public static void main(String[] args) {

    }
    public static int findMinimum(int n, int[] left, int[] right){
        //将左手中的所有手套取完然后减去数量最小的再加一个(表示取一只减掉的手套中的一个) 右手也是同样的操作,但是如果左右手套中有0的话就得将另一个不为0的手套数全部取掉,保证不会配对不成功
        int leftSum = 0;
        int rightSum = 0;
        int leftMin = Integer.MAX_VALUE;
        int rightMin = Integer.MAX_VALUE;
        int sum = 0;//表示有0的手套数就得取掉另一个手套的所有
        for (int i = 0; i < left.length; i++) {
            if(left[i] * right[i] == 0){
                sum = sum + right[i] + left[i];
            }else{
                leftSum += left[i];
                rightSum += right[i];
                leftMin = Math.min(leftMin,left[i]);
                rightMin = Math.min(rightMin,right[i]);

            }
        }
        return Math.min(leftSum - leftMin + 1,rightSum - rightMin + 1) + 1 + sum;
        //前面的加1表示一边手套中取的数量最少的一只,后面加1表示前面取了左右或右手的另外一只手的一只手套(要配对的),最后的sum表示有0的手套数
    }
}
